/**
 * Universidad del Valle de Guatemala
 * Algoritmos y Estructura de Datos
 * Sección 10
 * Carlos Alberto Solórzano Pineda (08832)
 * 06 de septiembre de 2011 
 * @author carlos
 * @version 1.2
 * @param <E>
 * 
 * Interfaz para una cola
 */
public interface Queue<E> {
	
	/**
	 * 
	 * @param value <E>
	 * @return True si el dato se pudo agregar
	 * @throws Exception Lanza una excepción
	 */
	public boolean add(E value) throws Exception;
	
	/**
	 * 
	 * @param value
	 */
	public void enqueue(E value);
	
	/**
	 * 
	 * @return El elemento eliminado
	 */
	public E remove();
	
	/**
	 * 
	 * @return La cabeza de la cola 
	 */
	public E dequeue();
	
	/**
	 * 
	 * @return El primer elemento de la lista
	 */
	public E getFirst();
	
	/**
	 * 
	 * @return El elemento en la cabeza de la cola
	 */
	public E get();
	
	/**
	 * 
	 * @return El elemento en la cabeza de la cola
	 */
	public E peek();
	
	/**
	 * 
	 * @return True si está vacía
	 */
	public boolean empty();
	
	/**
	 * 
	 * @return El tamaño de la cola
	 */
	public int size();
	
}
